-- redis key，下标从1开始
local key = KEYS[1]
-- 获取参数：当前时间
local now = tonumber(ARGV[1])
-- 获取参数：api请求次数的指定时间(秒)
local ttl = tonumber(ARGV[2])
-- 获取参数：redis过期时间
local expire = tonumber(ARGV[3])
-- 获取参数：最大api请求次数
local max = tonumber(ARGV[4])

-- 清楚指定区间内过期的数据
redis.call("zremrangebyscore", key, 0, expire)

-- 获取zset中当前元素的个数
local current = tonumber(redis.call("zcard", key))
local next = current + 1

if next > max then
    -- 达到限流大小 返回0
    return 0
else
    -- 往zset中添加一个值
    redis.call("zadd", key, now, now)
    -- 每次访问均重新设置zset的过期时间(毫秒)
    redis.call("pexpire", key, ttl)

    return next
end